home *** CD-ROM | disk | FTP | other *** search
Text File | 1994-09-27 | 3.7 KB | 115 lines | [TEXT/YHS2] |
- {-*********************************************************************
- MODULE R_MOVIE
-
- This module contains necessary functions for editing Movies. There
- are several that give information on a Movie, such as the heights or
- wirdths of its Pics. The others all deal with the various ways of
- combining various Movies into one Movie, a vital set of functions.
-
- *********************************************************************-}
-
- module R_Movie (ht, wid, orig,
- above, rABOVE, beside, rBESIDE,rBESIDE2, over, rOVER,
- overlay, rOVERLAY, pUT,
- uncurry, curry
- ) where
-
- import R_Ptypes
- import R_Constants
- import R_Utility
- import R_Picture
-
- -- takes a function and a list and returns a new list of element operated
- -- on by the function.
- promote:: (a->b)->[a]->[b]
- promote f [] = []
- promote f [p] = f p:promote f [p]
- promote f (p:ps) = f p:promote f ps
-
- -- promote1 takes a function that analyzes a Pic, and then applies it
- -- to analyse a movie, returning a list.
- promote1:: (Pic->a) -> Movie -> [a]
- promote1 f ps = [f p | p <- ps]
-
- -- ht takes a Movie and returns a list of the heights of the Pics
- ht :: Movie -> [Int]
- ht = promote1 ht_Pic
-
- -- wid takes a Movie and returns a list of the widths of the Pics
- wid :: Movie -> [Int]
- wid = promote1 wid_Pic
-
- -- orig takes a Movie and returns a list of vectors that are the
- -- origins of the Pics
- orig:: Movie -> [Vec]
- orig = promote1 orig_Pic
-
- -- promote2 takes a function accepting an element and a Pic, and
- -- applies the function to the Movie and list, producing a new Movie
- promote2:: (a->Pic->Pic) -> [a] -> Movie -> Movie
- promote2 f ps qs = [f p q | (p,q) <- zip2 ps qs]
-
- -- takes two Movies and puts them above one another
- above:: Movie -> Movie -> Movie
- above = promote2 above_Pic
-
- -- takes a list of Movies and puts them all above one another
- rABOVE:: [Movie] -> Movie
- rABOVE = reduce above
-
- -- takes two Movies and puts them beside one another
- beside:: Movie -> Movie -> Movie
- beside = promote2 beside_Pic
-
- -- takes a list of Movies and puts them all beside one another
- rBESIDE:: [Movie] -> Movie
- rBESIDE = reduce beside
-
- -- same as beside, but with absolute coordinates.
- beside2:: Movie -> Movie -> Movie
- beside2 = promote2 beside2_Pic
-
- -- same as rBESIDE, but with absolute coordinates.
- rBESIDE2:: [Movie] -> Movie
- rBESIDE2 = reduce beside2
-
- -- puts one Movie on top of the other Movie
- over:: Movie -> Movie -> Movie
- over = promote2 over_Pic
-
- -- takes a list of Movies, and puts the n-th on top of the first
- -- through 9n-1)th.
- rOVER:: [Movie] -> Movie
- rOVER = reduce over
-
- -- just overlays the two Movies by appending the Pics.
- overlay:: Movie -> Movie -> Movie
- overlay = promote2 overlay_Pic
-
- -- overlays a list of Movies by appending the Pics
- rOVERLAY:: [Movie] -> Movie
- rOVERLAY = reduce overlay
-
- -- promote3 takes a function that takes two items and a Pic and
- -- returns a Pic, and then applies it to two input lists and a Movie,
- -- producing a new Movie.
- promote3:: (a->b->Pic->Pic) -> [a] -> [b] -> Movie -> Movie
- promote3 f ps qs rs = [f p q r | (p,q,r) <- zip3 ps qs rs]
-
- -- pUT takes a list of Vectors, and puts each Pic of the first Movie
- -- in the location of the corresponding vector, on top of the Pic of
- -- the second Movie, and returns that list as a new Movie.
- pUT:: [Vec] -> Movie -> Movie -> Movie
- pUT = promote3 put_Pic
-
- -- uncurry takes a function that takes two elements and a list of
- -- two elements and applies the function to them.
- uncurry:: (a->a->b) -> [a] -> b
- uncurry f [a,b] = f a b
-
- -- curry takes a function that takes a list, and two elements, and
- -- then applies the function to the elements in a list.
- curry:: ([a]->b) -> a -> a -> b
- curry f a b = f [a,b]
-
-